/**************************************************************************
 * @name: user_linked_list.h
 * @brief: 创建用户链表头文件
 * @date:
 * @author: boluzs@163.com
 * @note: None
 * @version: 1.0.0
 * @Copyright (c) 2025 by boluzs@163.com, All Rights Reserved.
 **************************************************************************/

#ifndef __user_linked_list_H // 定义以防止递归包含
#define __user_linked_list_H

// (1)、头文件
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <errno.h>

// (2)、宏定义(函数、变量、常量)

// (3)、数据类型(结构体、联合体、枚举)
typedef int DataType_t; // 数据域中的数据类型，为了提高程序的可移植性
typedef struct User
{
    DataType_t UserId; // 用户ID
    char Name[16];     // 用户名
    char Phone[16];    // 联系方式
    double Balance;    //  用户余额
    char CarNum[16];   //  车牌号
    char InTime[32];   // 入场时间
    char OutTime[32];  // 出场时间
} User_t, *User_p;

typedef struct Node
{
    struct User *Data; // 数据域，用于存放当前结点的数据
    struct Node *Next; // 指针域，用于记录下个结点的地址
    struct Node *Prev; // 指针域，用于记录上个结点的地址
} Node_t, *Node_p;

// (4)、全局变量声明

// (5)、函数声明
extern Node_p CircularDoubleLinkedList_Create(void);
extern Node_p CircularDoubleLinkedList_NewNode(User_p Data);
extern bool CircularDoubleLinkedList_HeadInsert(Node_p HeadPointer, User_p Data);
extern bool CircularDoubleLinkedList_TailInsert(Node_p HeadPointer, User_p Data);
extern bool CircularDoubleLinkedList_HeadDel(Node_p HeadPointer);
extern bool CircularDoubleLinkedList_TailDel(Node_p HeadPointer);
extern int CircularDoubleLinkedList_SelectKData(Node_p HeadPointer, int k);
extern bool CircularDoubleLinkedList_Print(Node_p HeadPointer);
extern bool CircularDoubleLinkedList_DelMinNode(Node_p HeadPointer);
extern bool CircularDoubleLinkedList_ToSet(Node_p HeadPointer);
extern User_p User_Create(char *field[7]);
extern bool User_Create_ByTxt(Node_p HeadPointer, const char *PathName, const char *Mode);
extern void User_Add();                              // 用户添加信息
extern void User_Query();                            // 用户查询信息
extern void Get_User_Input(char *input, int length); // 获取用户输入

// (6)、全局变量定义、静态函数定义

#endif /* __user_linked_list_H */
